package com.zmn.oms.zmn.business.interfaces.wallquotation;

import com.zmn.base.pilot.common.dto.pilot.PilotCheckQuery;
import com.zmn.coa.common.dro.OrderAmountDRO;
import com.zmn.oms.common.dio.wallquotation.WallOrderAmountDIO;
import com.zmn.oms.common.dio.wallquotation.WallQuotationDIO;
import com.zmn.oms.common.dio.wallquotation.WallQuotationDetailDIO;
import com.zmn.oms.common.dro.wallquotation.WallOrderAmountDRO;
import com.zmn.oms.common.dro.wallquotation.WallQuotationDetailDRO;
import com.zmn.oms.common.dro.wallquotation.WallQuotationServItemDRO;
import com.zmn.oms.common.enums.WallTypeEnum;
import com.zmn.oms.common.exception.OmsBaseException;

/**
 * 墙面订单业务接口
 *
 * @author chengguang
 * @date 2022/05/24
 */
public interface WallQuotationBService {

    /**
     * 描述: 根据订单id和工单id获取墙面价格信息
     *
     * @param orderId 订单id
     * @param workId  工单id
     * @return {@link WallQuotationServItemDRO }
     * @author chengguang
     * @since 2022/05/26
     */
    WallQuotationServItemDRO getWallQuotationServItemByOrderIdAndWorkId(Long orderId,Long workId) throws OmsBaseException;

    /**
     * 描述: 根据订单id和工单id获取墙面报价单详细信息
     *
     * @param orderId 订单id
     * @param workId  工单id
     * @return {@link WallQuotationDetailDRO }
     * @author chengguang
     * @since 2022/05/24
     */
    WallQuotationDetailDRO getWallQuotationDetailByOrderIdAndWorkId(Long orderId,Long workId) throws OmsBaseException;

    /**
     * 描述: 计算墙面订单价格和优惠信息
     *
     * @param wallOrderAmountDIO 计算墙面订单价格入参
     * @return {@link OrderAmountDRO }
     * @author chengguang
     * @since 2022/05/26
     */
    WallOrderAmountDRO getWallOrderAmount(WallOrderAmountDIO wallOrderAmountDIO) throws OmsBaseException;

//    /**
//     * 描述: 修改墙面报价详细信息
//     *
//     * @param wallQuotationDetailDIO 墙面报价详细信息
//     * @return {@link Boolean }
//     * @author chengguang
//     * @since 2022/05/26
//     */
//    Boolean modifyWallQuotationDetail(WallQuotationDetailDIO wallQuotationDetailDIO) throws Exception;

    /**
     * 描述: 保存墙面报价
     *
     * @param wallQuotationDetailDIO 墙面报价详细信息
     * @return {@link Boolean }
     * @author chengguang
     * @since 2022/05/25
     */
    Boolean addWallQuotationDetail(WallQuotationDetailDIO wallQuotationDetailDIO) throws Exception;

    /**
     * 描述: 用户确认报价
     *
     * @param wallQuotationDIO 墙报价戴奥
     * @return {@link Boolean }
     * @author chengguang
     * @since 2022/05/31
     */
    Boolean confirmWallQuotation(WallQuotationDIO wallQuotationDIO) throws OmsBaseException;

//    /**
//     * 描述: 给用户发送报价单消息
//     *
//     * @param omsOperator oms操作基础参数
//     * @param productName
//     * @return {@link Boolean }
//     * @author chengguang
//     * @since 2022/06/01
//     */
//    Boolean sendWallQuotationToUser(OmsOperator omsOperator, String productName) throws Exception;

    /**
     * 描述: 根据订单和工单id判断是否为墙面订单
     *
     * @param orderId 订单id
     * @param workId  工单id
     * @return {@link Boolean }
     * @author chengguang
     * @since 2022/06/01
     */
    WallTypeEnum isWallQuotation(Long orderId, Long workId) throws OmsBaseException;

    /**
     * 描述: 检验是否为墙面订单
     *
     * @param pilotCheckQuery 试点检查查询
     * @param productGroupId  产品组id
     * @param servItemType    服务项目类型
     * @return {@link Boolean }
     * @author chengguang
     * @since 2022/06/06
     */
     WallTypeEnum isWallOrder(PilotCheckQuery pilotCheckQuery, Integer productGroupId, Integer servItemType);

    /**
     * 描述: 修改墙面订单的校验
     *
     * @param pilotCheckQuery 试点检查查询
     * @param productGroupId  产品组id
     * @param servItemType    服务项目类型
     * @param workId          工单id
     * @author chengguang
     * @since 2022/06/06
     */
    public void checkUpdateWallOrder(PilotCheckQuery pilotCheckQuery, Integer productGroupId, Integer servItemType,Long workId) throws OmsBaseException;
}
